package cn.coisini.service;

import cn.coisini.model.common.dtos.Result;
import cn.coisini.model.common.enums.ResultEnum;
import cn.coisini.model.dto.UserDto;
import cn.coisini.model.pojo.User;
import cn.coisini.model.vo.AssginRoleVo;
import cn.coisini.model.vo.QueryVo;
import cn.coisini.model.vo.UserVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author xiangshaw
 * Description: 用户接口
 */
public interface UserService extends IService<User> {
    // 分页条件查询用户
    Result<Object> pagingQuery(QueryVo queryVo);
    // 删除用户
    Result<ResultEnum> removeUser(String id);
    // 批量删除用户
    Result<ResultEnum> batchRemove(List<String> ids);
    // 添加用户
    Result<ResultEnum> addUser(UserDto userDto);
    // 修改用户
    Result<ResultEnum> updateUser(UserDto userDto);
    // 根据用户id查询用户
    Result<UserDto> findById(String userId);
    // 根据用户id列表查询用户
    List<User> findByIds(List<String> userIds);
    // 用户ID列表批量获取用户信息
    Map<String, User> getUserMapByIds(List<String> userIds);
    // 根据用户名查询用户
    Map<String, Object>  findByUsername(String username);
    // 获取用户信息
    Result<Map<String, Object>> getUserInfoByUserName();
    // 更新用户信息
    Result<ResultEnum> updateUserInfo(UserDto userDto);
    // 更新用户状态
    Result<ResultEnum> updateUserStatus(Integer status);
    // 更新用户头像
    Result<ResultEnum> updateUserAvatar(String avatar);
    // 获取用户密码
    String getUserPassword(String id);
    // 更新用户密码
    Result<ResultEnum> updateUserPassword(UserVo userVo);
    // 用户绑定手机号
    Result<ResultEnum> bindPhone(UserVo userVo);
    // 核对用户手机号校验
    boolean checkUserPhone(String phone);

    // ---用户 角色 关系---
    // 根据用户id获取角色信息
    Result<Map<String, Object>> getRolesByUserId(String id);
    // 给用户分配角色
    Result<ResultEnum> doAssign(AssginRoleVo assginRoleVo);

    // 根据用户ids获取用户名称
    Map<String, String> getUserNamesByIds(List<String> userIds);
}
